#ifndef _SINGLE_H
#define _SINGLE_H

#define initSing( type ) \
	template <> type * Single<type>::inst = 0

template<typename T>
class DLL_EXPORT Single
{
protected:
	static T* inst;
public:
	__forceinline static T* getSingle()
	{
		if(!inst)
		{
			char msg[255];
			sprintf(msg, "%s - inst == 0 - tritt auf, wenn der Konstruktor noch nicht aufgerufen wurde!", typeid(T).name());
			throw(msg);
		}
		return inst;
	}

	Single()
	{
		if(inst)
		{
			char msg[255];
			sprintf("%s - inst != 0  - Konstruktor einer Single-Klasse nur einmal aufrufen!!", typeid(T).name());
			throw(msg);
		}
		inst = (T*)this;
	}
};

#endif